home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
cat
/
catedit.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
14KB
|
419 lines
DEFINITION MODULE CatEdit;
(*$Z+*)
FROM SYSTEM IMPORT ADDRESS;
FROM GrafBase IMPORT Rectangle;
FROM EditTypes IMPORT searchPos, searchCount, searchDir, CAT;
IMPORT EditTypes;
TYPE KillProcType = PROCEDURE(VAR ARRAY OF CHAR, ARRAY OF CHAR);
(* Path, Name *)
VAR KillProc : KillProcType;
LL : CARDINAL;
PROCEDURE SelectEditFont (wdw : INTEGER; font, fontSize : INTEGER);
(* Setzt den neuen Font fr den Editor
*)
(* Anzeige-Funktionen des Editors! *)
PROCEDURE OpenEditBuffer (REF title, infoline : ARRAY OF CHAR;
showInfo : BOOLEAN;
buff : ADDRESS; buffLen : LONGCARD;
freeBuffer: BOOLEAN;
isEnriched: BOOLEAN;
font, fontSize : INTEGER; work : Rectangle;
(* User-Proc Parameter *)
useUserProc : BOOLEAN;
theUserProc, theUserRectProc,
theDrawUserProc, theCloseProc,
theKeyProc, theTopProc,
theUntopProc,thePrePrintProc : ADDRESS; (*!! Hier aufpassen!*)
(* Edit-Parameter *)
VAR wdwHandle : INTEGER) : BOOLEAN;
(* ffnet einen Editor und liest Text aus Buffer *)
PROCEDURE CloseEditBuffer (wdw : INTEGER);
(* Schliet Nachrichtenfenster *)
PROCEDURE EditAbandonText (wdw : INTEGER);
(* Verwirft alle nderungen und ldt den Text neu nach Rckfrage
*)
PROCEDURE EditReloadText (wdw : INTEGER);
(* Verwirft alle nderungen und ldt den Text neu ohne Rckfrage
*)
PROCEDURE ShowNewBuffer (wdw : INTEGER;
REF title, infoline : ARRAY OF CHAR;
buff : ADDRESS; buffLen : LONGCARD;
freeBuffer: BOOLEAN;
isEnriched: BOOLEAN);
(* Zeigt neuen Text im Anzeigefenster an! *)
PROCEDURE OpenEditor (REF path, FileName : ARRAY OF CHAR; New : BOOLEAN;
(* User-Proc Parameter *)
useUserProc : BOOLEAN;
theUserProc, theUserRectProc,
theDrawUserProc, theCloseProc,
theKeyProc, theTopProc,
theUntopProc, thePrePrintProc : ADDRESS; (*!! Hier aufpassen!*)
(* Edit-Parameter *)
right : INTEGER;
showInfo : BOOLEAN;
wrap : BOOLEAN;
num : INTEGER; (* Wird als interne Editornummer benutzt, falls nicht schon vergeben und > 0 *)
VAR wdwHandle : INTEGER) : BOOLEAN;
(* ffnet einen Editor im Fenster. Font und Fontsize und gewnschte
* Workarea mssen bergeben werden, wdwHandle dieses Editors wird
* im Erfolgsfall zurckgeliefert.
* ber die User-Procs kann man noch einen Bereich im Editor-Fenster
* festlegen, in denen Benutzerdefinierte Sachen dargestellt werden knnen.
* Die User-Routine wird angesprungen, falls ein Button-Event in diesem Bereich
* auftrat. Die RectProc wird nach jeder Gren und Positionsnderung aufgerufen.
* Die DrawUserProc wird aufgerufen, wenn Fensterteile neu gezeichnet werden
* mssen.
* !!! Im Moment ist es nur mglich, einen Bereich am oberen Ende des Fensters
* als UserBereich zu benutzen!!!
* Die Parameter fr die Userprozeduren sind als Adressen aufgefhrt, damit es
* leichter ist, keine Userproc zu bergeben! Deshalb kann aber der Compiler
* das auch nicht berprfen, also Vorsicht beim Aufruf!
*)
PROCEDURE InstallUserDD (wdw: INTEGER;
userDDGetMaxExts : EditTypes.userDDGetMaxExtProc;
userDDGetExt : EditTypes.userDDGetExtProc;
userDDGetExtName : EditTypes.userDDGetExtNameProc;
userDDGetSize : EditTypes.userDDGetSizeProc;
userDDGetData : EditTypes.userDDGetDataProc);
(* Installiert den DD-Server der Userprozedur
*)
PROCEDURE EditPrint(wdw : INTEGER; block : BOOLEAN);
(* Druckt entweder den ganzen Text oder nur den markierten Block *)
PROCEDURE EditSave(wdw : INTEGER;REF path, FileName : ARRAY OF CHAR; takeName: BOOLEAN);
(* nachfragen, wenn File schon vorhanden *)
PROCEDURE EditMerge(wdw : INTEGER; REF path, name : ARRAY OF CHAR);
(* Blockfunktionen *)
PROCEDURE EditCut(wdw : INTEGER): BOOLEAN;
PROCEDURE EditCopy(wdw : INTEGER): BOOLEAN;
PROCEDURE EditPaste(wdw : INTEGER);
PROCEDURE EditClear(wdw : INTEGER);
PROCEDURE EditPasteFile (wdw: INTEGER; isFilter: BOOLEAN; REF path, name: ARRAY OF CHAR);
(* Fgt einen Text mit Filename ein
*)
PROCEDURE CloseEditor(wdw : INTEGER; force : BOOLEAN) : BOOLEAN;
(* wird aufgerufen, wenn Editor geschlossen werden soll. Falls Text gendert
* wurde, wird nachgefragt und ggf. FALSE zurckgegeben.
* Bei force = TRUE wird nicht nachgefragt, sondern der Text gespeichert und
* in jedem Fall TRUE zurckgegeben.
*)
PROCEDURE IsEditTop(wdw : INTEGER): BOOLEAN;
(* fragt nach, ob ein Editor das Top-Window hat
*)
PROCEDURE EditChar(wdw, vdiH : INTEGER; special : ADDRESS; taste: INTEGER; char, scan : CHAR; kstate : BITSET): BOOLEAN;
PROCEDURE ClickInEditWindow(win, vdiH : INTEGER; special : ADDRESS; x,y : INTEGER; kstate, buts : BITSET; clicks : INTEGER): BOOLEAN;
PROCEDURE EditAbandonText (wdw: INTEGER);
(* Fragt nach, ob die letzte Fassung des Textes geladen werden soll und macht das
* dann
*)
PROCEDURE GetBlock (wdw : INTEGER; unChanged: BOOLEAN; withCrs : BOOLEAN; VAR adr : ADDRESS; VAR buffLen : LONGCARD) : BOOLEAN;
(* Kopiert den gesamten Block an einem Stck
* in einen Speicherbereich. Nur am Absatzende wird ein CR/LF
* angefgt.
* Dieser Bereich wird von dieser Routine angelegt und mu
* bei Nichtgebrauch wieder freigegeben werden
*)
PROCEDURE PutLine(win : INTEGER; adr : ADDRESS; len : CARDINAL) : BOOLEAN; (* Voll? *)
(* Fr Floskeltasten und hnliches
*)
PROCEDURE QuoteSomething (win : INTEGER; REF pre : ARRAY OF CHAR;
adr : ADDRESS; len : CARDINAL; width: INTEGER) : BOOLEAN; (* Voll? *)
(* Fr Quoten.
*)
(* Umfangreiche Such- und Ersetzroutinen.
*
* Start: aktuelle Position, Top, Ende
* Richtung: nach oben, nach unten
* Anzahl: erstes, ntes, letztes Vorkommen
* Modusflags: groklein, nurWort
*)
PROCEDURE Search (wdw : INTEGER; w : ARRAY OF CHAR; pos : searchPos;
direction : searchDir; count : searchCount;
num (* wird nur bei count = nmal benutzt *) : INTEGER;
ignoreCase : BOOLEAN; onlyWord : BOOLEAN;
again : BOOLEAN): BOOLEAN;
(* Nur suchen, gefundene Stelle wird angezeigt *)
PROCEDURE SearchAndReplace (wdw : INTEGER; w, r : ARRAY OF CHAR; pos : searchPos;
direction : searchDir; count : searchCount;
num (* wird nur bei count = nmal benutzt *) : INTEGER;
ignoreCase : BOOLEAN; onlyWord : BOOLEAN;
ask: BOOLEAN; again : BOOLEAN): BOOLEAN;
(* Suchen und ersetzen, evtl. mit Rckfrage
*)
PROCEDURE BlockIsMarked (wdw : INTEGER) : BOOLEAN;
(* Ist Ersatz fr EditMenu(); Das MUSS in CAT gemacht werden!
*)
PROCEDURE ClickIsInBlock (wdw : INTEGER; x, y: INTEGER) : BOOLEAN;
(* Gibt zurck, ob die Position x, y im Blockbereich liegt
*)
PROCEDURE GetEditVDIHandle (wdw : INTEGER; VAR hdl : INTEGER);
(* Liefert Handle der Workstation des Fensters *)
(*$? NOT CAT:
(* neue Funktionen fr Eddix *)
PROCEDURE ToLineNr (wdw: INTEGER; nr : LONGINT);
(* Geht zur Zeile nr, falls mglich *)
PROCEDURE GetCompInfo (wdw: INTEGER; VAR fname: ARRAY OF CHAR;
VAR saved: BOOLEAN): BOOLEAN;
(* Liefert den kompletten Filenamen, falls das Fenster ein Editor
* ist
*)
PROCEDURE FileInfos (wdw : INTEGER; VAR lines, bytes : LONGCARD;
VAR edits : INTEGER;
VAR totalMem : LONGCARD;
VAR fName : ARRAY OF CHAR) : BOOLEAN;
(* Gibt Informationen ber den aktuellen Text raus
*)
PROCEDURE SetListMode (wdw: INTEGER);
(* Setzt den Listenmodus fr ein Fenster. Dabei wird der Cursor
* ausgeschaltet, das Fenster auf Readonly gesetzt und der Listen-
* modus angeschaltet
*)
PROCEDURE SetListProc (wdw: INTEGER; listProc : ADDRESS): BOOLEAN;
(* Setzt die ListModeProc fr ein Fenster. Um alles einzuschalten,
* sollte man einfach SetListMode aufrufen.
*)
PROCEDURE FileIsEditor (REF fname: ARRAY OF CHAR; VAR wdw: INTEGER): BOOLEAN;
(* Gibt bei einem bergebenem Dateinamen zurck, ob diese Datei
* schon geladen ist. Beachtet auch Case-Sensitivitt von Filesystemen
* Im Falle von TRUE wird in wdw das Fensterhandle des Editors
* zurckgeliefert
*)
*)
PROCEDURE CloseAllEditors (force : BOOLEAN) : BOOLEAN;
(* schliet alle Editoren, gibt TRUE zurck, falls
* erfolgreich
* Wenn force = TRUE ist, dann werden alle Texte ohne Rckfrage
* gespeichert!
*)
PROCEDURE GetEditNumber (wdw : INTEGER) : INTEGER;
(* Gibt die interne Nummer des Editors zurck *)
PROCEDURE EditSaveWdwPos (wdw : INTEGER);
(* Sichert die Position des Editors in den
* Configvariablen
*)
PROCEDURE EditSavePos();
(* Sichert die Position und den Inhalt aller offenen Editorfenster
* (nicht ReadOnly-Fenster
*)
PROCEDURE EditRestorePos();
(* Restauriert den Inhalt und die Position der EditorFenster
*)
PROCEDURE EditSetOffset (wdw: INTEGER; offset: INTEGER);
(* Setzt den Cursor an die Position offset im aktuellen Buffer
* Wird nur fr CAT gebraucht im Messagemanager!
*)
PROCEDURE EditSetLineAndRow (wdw: INTEGER; line: LONGINT; row: INTEGER);
(* Setzt den Cursor an die angegebene Position, falls mglich
*)
PROCEDURE DoUndo (wdw : INTEGER);
(* Fhrt Undo durch *)
PROCEDURE MarkAll (wdw : INTEGER);
(* Markiert den ganzen Text als Block *)
PROCEDURE MarkWord (wdw : INTEGER);
(* Markiert das Wort beim Cursor als Block *)
PROCEDURE SetBlockStart (wdw : INTEGER);
(* Setzt den Blockstart an der aktuellen
* Cursorposition
*)
PROCEDURE SetBlockEnd (wdw : INTEGER);
(* Setzt das Blockende an der aktuellen
* Cursorposition
*)
PROCEDURE SetMark (wdw : INTEGER; number : INTEGER);
(* Setzt Marke number an Cursorposition
*)
PROCEDURE ClearBlock (wdw : INTEGER);
(* Lscht Blockmarkierung
*)
PROCEDURE ToMark (wdw : INTEGER; number : INTEGER);
(* Springt zur Marke number
*)
PROCEDURE ToBlockStart (wdw : INTEGER);
(* Springt zum Blockanfang
*)
PROCEDURE ToBlockEnd (wdw : INTEGER);
(* Springt zum Blockende
*)
PROCEDURE SetTabsize (wdw : INTEGER; size : INTEGER);
(* Setzt Tabsize auf size
*)
PROCEDURE GetTabsize (wdw : INTEGER; VAR size : INTEGER);
(* Setzt Tabsize auf size
*)
PROCEDURE SetMargins (wdw : INTEGER; right : INTEGER; umbruch : BOOLEAN);
(* Setzt die Rnder und man kann den Umbruch ein-
* und ausschalten
*)
PROCEDURE GetMargins (wdw : INTEGER; VAR right : INTEGER);
(* Gibt den eingestellten rechten Rand zurck.
*)
(* Modus-Einstellungen *)
TYPE editMode = (insMode, indentMode, autoBackup, wrapMode, tabMode, crMode, roMode, effMode, errorMode);
PROCEDURE ToggleMode (wdw : INTEGER; mode : editMode);
(* Schaltet einen Zustand um *)
PROCEDURE SetMode (wdw : INTEGER; mode : editMode; val : BOOLEAN);
(* Setzt einen Zustand
*)
PROCEDURE GetMode (wdw : INTEGER; mode : editMode) : BOOLEAN;
(* Fragt einen Zustand ab.
*)
(*$? NOT CAT:
(* Fr Compilierung ein paar Prozeduren *)
PROCEDURE CompileText (wdw : INTEGER);
PROCEDURE ShowError (wdw : INTEGER);
PROCEDURE SetError (wdw: INTEGER; errorLine : LONGINT;
errorRow : INTEGER; REF errorMsg : ARRAY OF CHAR;
show : BOOLEAN);
(* Block bearbeiten wie in GME *)
PROCEDURE IndentBlock (wdw : INTEGER);
*)
(* Block Transformationen *)
PROCEDURE BlockUp (wdw : INTEGER);
PROCEDURE BlockDown (wdw : INTEGER);
PROCEDURE BlockCapitals (wdw : INTEGER);
PROCEDURE BlockSwap (wdw : INTEGER);
PROCEDURE BlockRot18 (wdw : INTEGER);
PROCEDURE BlockRot (wdw : INTEGER);
PROCEDURE BlockDecode (wdw : INTEGER);
PROCEDURE BlockMirror (wdw : INTEGER);
PROCEDURE BlockProtect (wdw : INTEGER);
PROCEDURE UndoPossible (wdw : INTEGER): BOOLEAN;
PROCEDURE GetTextLineLength (wdw : INTEGER; line: LONGINT; VAR len: INTEGER): BOOLEAN;
(* Liefert die Lnge der Zeile line im zum wdw gehrenden Editor zurck.
* FALSE: Fenster ist kein Editor oder Zeile nicht vorhanden
*)
PROCEDURE GetTextLine (wdw: INTEGER; line : LONGINT;
VAR str : ARRAY OF CHAR; VAR len : INTEGER): BOOLEAN;
(* Liefert die Zeile line im zum wdw gehrenden Editor zurck.
* FALSE: Fenster ist kein Editor oder Zeile nicht vorhanden
*)
PROCEDURE GetEditBuffer (wdw: INTEGER; VAR adr : ADDRESS; VAR len : INTEGER): BOOLEAN;
(* Liefert die Adresse des ersten Buffers im zum wdw gehrenden Editor zurck.
* In len steht der benutzte Speicherplatz.
* FALSE: Fenster ist kein Editor
*)
PROCEDURE AskForSave (wdw : INTEGER);
(* Fragt nach, falls der Text verndert wurde, ob dieser gesichert
* werden soll.
*)
PROCEDURE ToEnd(wdw : INTEGER);
(* Setzt den Cursor an das Ende eines Textes
*)
PROCEDURE GetWildChars (VAR one, all: CHAR);
(* Holt die Wildcardzeichen
*)
PROCEDURE SetWildChars (one, all: CHAR);
(* Setzt die Wildcardzeichen
*)
PROCEDURE CheckWildAssign (VAR search, repl: ARRAY OF CHAR): BOOLEAN;
(* Prft die Konsistenz von Wildcards und ihren Gegenstcken im Such-
* und Ersetzstring
*)
PROCEDURE MarkMultiple (wdw: INTEGER);
(* Startet den multiplen Blockmarkiermodus
*)
(*$? NOT CAT:
PROCEDURE ReadShortkeyFile(REF fname: ARRAY OF CHAR);
(* Liest eine Krzeldatei ein
*)
PROCEDURE FreeShortkeyList ();
(* Gibt eine Krzeldatei wieder frei
*)
*)
END CatEdit.